Computer systems are highly useful for compiling and processing large amounts of data. Modern computer system often include graphics capabilities that allow the display and printing of graphic images. Printing a page of text and/or graphics images requires the conversion of data from the format used on a host computer to a format used by the particular printer selected. Typically, the computer data is translated into a bit-map data file where each bit represents a dot on the printed page. The bit-map is usually generated within the host computer and transferred to the printer in compressed data format. The compressed bit-map is expanded in the printer and transferred to a print engine, which is the portion of the printer that controls the paper movement, toner, and mechanical drive system which moves the paper, as well as the electronic circuitry which controls the printing process. The print engine receives the bit-map data and converts it into the appropriate voltages to create a printed image.
The printed page is comprised of individual dots, called pixels. On a typical laser printer, there may be 300, 600, or more pixels per inch. Each pixel is usually represented by a single data bit in the printer memory. As the laser print engine scans a line, the data bits corresponding to that line are read and the laser beam turns on or off depending on the logic level of the data bit stored in that memory location. At a resolution of 300 pixels per inch, a printer requires approximately one megabyte of memory to store the bit-map data file for an entire page. Some laser printers contain large memories and operate in a page mode, which means that the printer can store an entire page of data in bit-map form. Because of the large amount of memory required to store an entire page in bit-map form, some printers use a banding mode to reduce the amount of memory required. A printer with banding mode capability breaks the printed page down into a number of horizontal segments called bands. The printer accepts the bit-map data for only one band at a time thus reducing the memory requirement. When the printer has processed the data for the first band, it can accept data for the second band and so forth. For example, if the printed page is broken down into four bands, the memory requirements are reduced by a factor of four because the printer need only store the bit-map data for one fourth of the page.
Designing a computer-printer system involves the achievement of two basic goals. The first goal is that of device independence. In an effort to make the printer independent of system constraints of any particular host computer, manufacturers and programmers design printer drivers that attempt to be universal. If there is true device independence, the host computer does not need to know what type of printer is connected to the printer interface. The host computer typically transmits data to the printer system through a hardware interface such as a serial I/O port or a parallel printer I/O port. Prior art computer-printer systems attempt to achieve device independence by minimizing the host's knowledge of a particular attached printer and relying instead on a rather abstract data stream. As a result, transfer and processing of the data stream is often slowed to an inefficient pace, and throughput suffers.
As an example, a host computer may download a first character font set required for several pages of a document. Typically, computer systems of the prior art download an entire font even when only a few characters are needed for a particular printing task. The host computer will download an entire second character font set when the second font set (or part of the second font set) is needed. The second font set may be written into the memory space occupied by the first font set even though there may be room within the printer memory to retain the first font set for use when printing subsequent pages requiring the first font set. There is no communication from the printer to the host computer to advise the host computer of the current status of the printer resources.
The second goal is optimum performance of the printing process. Laser printers range from simple stand-alone printers coupled to a single computer and processing one or two pages of paper at a time to sophisticated printers with multiple paper trays and complex paper pathways coupled to a computer network and simultaneously processing many pages for multiple users. Computer systems must be capable of operating effectively with any type of printer.
Unfortunately, these first and second goals may come into conflict. The trade-off for attempting universal compatibility is that computer-printer systems are often extremely slow in processing data. Furthermore, host computers do have some awareness of the printer to which they are connected. Ironically, in an attempt to achieve these two goals, present computer-printer systems fail to achieve either goal. The host computer is aware of the type of printer to which it is connected, and yet the "universal" printer driver approach results in a slow, inefficient system where the host computer and printer often spend valuable computing time resolving conflicts that may not arise, such as page error recovery, rather than performing useful tasks. For example, prior art computer-printer systems retain the bit-map data file for an entire page until the printed page clears the last jam sensor on the laser printer. In the event that a page jams, the data is available and the page can quickly be reprinted. However, paper jams occur relatively infrequently in the printing process. Once the print engine begins to print a page, it takes approximately ten seconds for the page to clear the last jam sensor. The overall printing process is slowed significantly by waiting an extra ten seconds for each page to clear the last jam sensor before clearing the bit-map data file from the printer memory and processing the next page.
Prior art systems also delay feeding paper to the print engine until the entire page has been described because the selection of paper size may be made at any time during the page description. For example, the host computer could transfer a description of the entire page and the final description line could be the selection of letter size paper. There is no need to delay the paper feeding if the user is required to select the paper size at the beginning of the page description. Few, if any, print tasks are hampered by this requirement. The user generally knows the paper size and the print mode (i.e., simplex or duplex) before the print process begins. Therefore, prior art systems waste valuable time by providing an unnecessary option.
Currently used printer languages have evolved from the printer languages used with dot matrix printers. While dot matrix printers are still in use, the use of laser printers is widespread and growing. Yet, the printer languages have attempted to deal with the increased use of laser printers by making minor modifications to printer languages oriented to the slower dot matrix printers. This evolutionary approach does not take advantage of the potential computing power available in laser printers.
The system architecture of prior art computer-printer systems has changed very little even though the printer hardware has evolved from simple "dumb" printers to sophisticated laser printers controlled by microprocessors. A typical prior art computer-laser printer system 2, shown in FIG. 1 where an application program 4, running on a host computer 6, generates data to be printed. The data is converted to a compressed bitmap by a printer driver 8 within the host computer 6. A typical prior art printer 10 known as a parser. The parser 12 accepts bytes of data from the host computer 6 and organizes the bytes of data into tokens. Tokens are streams of data that are associated in a meaningful lexical context. For example, a data stream may be a binary bit-map transmitted in a compressed data format. The binary data is usually accompanied by a header and trailer instructing the parser how to process the data. The header/trailer are transmitted in ASCII bytes, each of which must be processed by the parser 12. The parser must accept and process every ASCII data byte, one byte at a time. As a result, the parser 12 is a bottleneck to efficient data flow in a computer-printer system 2.
The parser 12 processes every byte of data received by the printer 10 and creates a display list within a memory in the printer. The display list is sorted by virtue of where the object is located on the page. Bitmaps in the display list 14 are generally stored in an uncompressed format. Other objects such as text are rather brief. Therefore, a single, simple rectangle running around the circumference of the page will generally require one megabyte of storage. An imager 16 translates the display list 14 into a bit-map data file suitable for the print engine. The bit-map data file is stored in a frame buffer 18 and transmitted to the print engine 20.
Another area in which prior art computer-printer systems are inefficient is that pages are often processed in an inefficient order. If the printer is operating in the duplex mode (printing on both side of the page), the paper pathway taken by the page within the printer demands that side two of a page be printed before side one. However, prior art computer-printer systems demand that side one of a page be processed before side two. This means that side one of the page be processed completely and stored within the printer memory as a bit-map data file. Then, side two of the page is completely processed and sent to the print engine. The philosophy in prior art systems is that the user expects side one to be processed first. However, the user really only expects that the pages will appear in the proper order in the printer tray when the document is completely printed. There is no practical reason that the host computer should process the pages in any order other than the order in which the pages will actually be printed by the printer.
As noted above, prior art systems also fail to use the potential computing power available in modern laser printers. The older design dumb printers were little more than a data buffer and a print engine. The data processing was all done by the host computer and the printer printed the dot matrix data. Modern laser printers are microprocessor controlled and have computing power that may even equal that of the host computer. Prior art systems still tend to treat the printer as a dumb printer without the capability of performing any data processing. This is due, in part, to the attempt to achieve device independence, as described above. Other prior art systems give the printer responsibility for virtually all data processing. The result is that the combined computing power of the host computer and the printer is not utilized efficiently, and the overall printing process is slowed to an inefficient pace.
Because there is little communication between the host computer and the printer, the host computer and printer cannot effectively share the task of data processing. Prior art host computers generally perform virtually all of the data processing or virtually none of the data processing.
The attempts to achieve device independence and universal operation with all types of printers results in an inefficient printing process in which potential computing power is untapped and resources are wasted because the host computer and printer do not communicate effectively with each other. Therefore, it can be appreciated that there is a significant need for a computer-printer system that allows effective communication between the host computer and the printer, and maximizes utilization of resources.